import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class 登录验证系统 {
    public static void main(String[] args) {

        //初始化一个界面
        Map<String, String> IU = initUI();
        //验证用户名和密码
        boolean booleanSuccess = login(IU);
        //最后输出结果
        if (booleanSuccess) {
            System.out.println("登录成功！");
        } else {
            System.out.println("登录失败！");
        }
    }

    /**
     * 验证用户名和密码的具体方法
     * 该代码存在bug
     * 当    账户：fdsa
     * 密码：fdsa' or '1'='1        也会登录成功
     *
     * @param iu=true，表示登录成功，否则登录失败
     * @return
     */
    private static boolean login(Map<String, String> iu) {
        //打标记点
        boolean isFlag = false;
        //JDBC代码
        //单独定义变量
        String lgName = iu.get("loginName");
        String lgPwd = iu.get("loginPwd");

        Connection con = null;
        Statement sta = null;
        ResultSet rs = null;
        try {
            //注册驱动

//            Driver driver=new com.mysql.cj.jdbc.Driver();//MySQL8.0.23的注册方法，从包名开始创建一个Driver实现类的对象
//
//            DriverManager.registerDriver(driver);
            Class.forName("com.mysql.cj.jdbc.Driver");


            //获取数据库链接对象
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xclmf", "root", "552200");
            //System.out.println("连接数据库成功："+con);
            //获取数据库操作对象
            sta = con.createStatement();

            //执行sql语句
            String sql = "select * from t_user where realName = '" + lgName + "' and loginPwd='" + lgPwd + "'";
            rs = sta.executeQuery(sql);

            //处理sql查询结果集
            if (rs.next()) {
                isFlag = true;
            }

        } catch (Exception e) {
            System.out.println("代码出错！");
        } finally {
            //释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (sta != null) {
                try {
                    sta.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

        }
        return isFlag;
    }


    /**
     * 初始化一个界面的具体方法
     * 用户输入用户名和密码
     *
     * @return
     */
    private static Map<String, String> initUI() {
        Scanner s = new Scanner(System.in);

        System.out.print("请输入用户名(字符串型数据)：");
        String loginName = s.nextLine();

        System.out.print("请输入你的密码(整型数据)：");
        String loginPwd = s.nextLine();


        Map<String, String> IU = new HashMap<>();
        IU.put("loginName", loginName);
        IU.put("loginPwd", loginPwd);
        return IU;
    }
}
